package org.farm2.tools.web;

import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.safety.Safelist;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Farm2HtmlUtils {
    /**
     * 删除文本中的xml标签
     *
     * @param text
     * @return
     */
    public static String removeXmlTag(String text) {
        if (text == null || text.isEmpty()) {
            return text;
        }
        // 正则表达式用于匹配XML标签
        String xmlTagRegex = "<[^>]+>";
        Pattern pattern = Pattern.compile(xmlTagRegex);
        Matcher matcher = pattern.matcher(text);
        // 使用StringBuilder来构建结果字符串
        StringBuilder result = new StringBuilder();
        int lastEnd = 0;
        while (matcher.find()) {
            // 将非XML标签部分添加到结果中
            result.append(text, lastEnd, matcher.start());
            lastEnd = matcher.end();
        }
        // 添加最后一段非XML标签部分
        result.append(text.substring(lastEnd));
        return result.toString();
    }

    /**
     * 删除html中所有的标签和样式js等，只返回可见的文本内容
     *
     * @param html
     * @return
     */
    public static String getTextByHtml(String html) {
        if (html == null || html.isEmpty()) {
            return html;
        }
        // 使用Jsoup的clean方法去除所有标签和样式，只保留纯文本
        String cleanText = Jsoup.clean(html, Safelist.none());
        // 解析清理后的文本以进一步提取可见文本
        Document document = Jsoup.parse(cleanText);
        // 使用text()方法获取文档中的可见文本
        return document.text();
    }


    public static String getTextByHtml(String html, int maxnum) {
        String text = getTextByHtml(html);
        if (text.length() > maxnum) {
            return text.substring(0, maxnum - 1);
        } else {
            return text;
        }
    }

    public static String getSrc(Element img) {
        String src = img.attr("src");
        if (StringUtils.isBlank(src)) {
            src = img.attr("data-original");
        }
        img.removeAttr("data-original");
        if (StringUtils.isBlank(src)) {
            src = img.attr("data-src");
        }
        img.removeAttr("data-src");
        return src;
    }

    /**
     * 从html中提取属性
     *
     * @param html
     * @param tag
     * @param attr
     * @return
     */
    public static void getAttrs(Element html, String tag, String attr, Farm2HtmlUtilsHandleInter handle) {
        for (Element node : html.getElementsByTag(tag)) {
            handle.handle(node, node.attr(attr));
        }
    }
}
